import jieba.posseg as posseg
import re
import jieba

class analyzer:
    # 载入文档
    document = ""

    # 词分割
    words = []

    # 出现的人名
    person_names = set()

    # 出现的动词，并排序
    # 排序后，verbs将变成一个KV的list
    verbs = dict()
    
    # 出现的名词，并排序
    # 排序后，nouns将变成一个KV的list
    nouns = dict()
    
    # 出现的形容词，并排序
    # 排序后，adjs将变成一个KV的list
    adjs = dict()

    # 出现的日期
    date_matches = []

    # 出现的地址
    addresses = []

    # 出现的法庭
    courts = []

    # 出现的民族
    nations = []
    
    # 出现的性别 0男1女
    sex0 = 0
    sex1 = 0
    
    # 分析可能的案由
    couses = []

    def __init__(self, document):
        
        jieba.load_userdict('src\\main\\resources\\static\\dict.txt')
        
        self.document = document
        self.words = posseg.cut(document.replace("　", "").replace(" ", "").replace("\n", "").replace("\r", ""))
        i = 1
        
        off1word = ''
        off2word = ''
        off3word = ''
        for word, flag in self.words:
            
            # 查找可能的案由
            if word == '一案':
                self.couses.append(off1word)
                self.couses.append(off2word + off1word)
                self.couses.append(off3word + off2word + off1word)
            
            off3word = off2word
            off2word = off1word
            off1word = word
            
            # 输出用于观察
            # if i % 10 == 0:
            #     print()
            # print("%s: %s %s\n" % (i, word, flag))

            # 查找动词
            if flag == 'v':
                if (word in self.verbs):
                    self.verbs[word]+=1
                else:
                    self.verbs[word]=1
            
            # 查找名词
            if flag == 'n':
                if (word in self.nouns):
                    self.nouns[word]+=1
                else:
                    self.nouns[word]=1

            # 查找形容词
            if flag == 'a':
                if (word in self.adjs):
                    self.adjs[word]+=1
                else:
                    self.adjs[word]=1

            # 查找人名
            elif flag == 'nr':
                self.person_names.add(word)
            i+=1
        
        # 动词按出现次数排序
        self.verbs = sorted(self.verbs.items(), key = lambda kv:(kv[1], kv[0]), reverse=True)
        
        # 名词按出现次数排序
        self.nouns = sorted(self.nouns.items(), key = lambda kv:(kv[1], kv[0]), reverse=True)
        
        # 形容词按出现次数排序
        self.adjs = sorted(self.adjs.items(), key = lambda kv:(kv[1], kv[0]), reverse=True)
        
        # 查找日期
        self.date_matches = re.findall(r'.{0,4}年.{0,2}月.{0,2}日', document)
        
        # 查找地址
        pattern = re.compile(r'(北京市|天津市|河北|山西|内蒙古|辽宁|吉林|黑龙江|上海市|江苏|浙江|安徽|福建|江西|山东|河南|湖北|湖南|广东|广西|海南|重庆市|四川|贵州|云南|西藏|陕西|甘肃|青海|宁夏|新疆|香港|澳门|台湾).{0,5}(省|自治区|特别行政区)(.{1,10}(市|盟|州|地区))?(.{1,10}(区|县|市|旗|特区|林区))?(.{1,10}(街道|镇|乡|苏木|区))?(.{1,10}(村|屯))?(.{1,15}(街|路|巷|胡同))?(.{1,15}号)?(.{1,15}室)?')
        for match in pattern.finditer(document):
            self.addresses.append(match.group())

        # 查找法院
        pattern = re.compile(r'((北京市|天津市|河北|山西|内蒙古|辽宁|吉林|黑龙江|上海市|江苏|浙江|安徽|福建|江西|山东|河南|湖北|湖南|广东|广西|海南|重庆市|四川|贵州|云南|西藏|陕西|甘肃|青海|宁夏|新疆|香港|澳门|台湾).{0,5}(省|自治区|特别行政区)?(.{1,10}(市|盟|州|地区))?(.{1,10}(区|县|市|旗|特区|林区))?.{0,8}法院)|(中华人民共和国最高人民法院)')
        for match in pattern.finditer(document):
            self.courts.append(match.group())

        # 查找民族
        pattern = re.compile(r'(汉族|壮族|满族|回族|苗族|维吾尔族|土家族|彝族|蒙古族|藏族|布依族|侗族|瑶族|朝鲜族|白族|哈尼族|哈萨克族|黎族|傣族|畲族|傈僳族|仡佬族|东乡族|高山族|拉祜族|水族|佤族|纳西族|羌族|土族|仫佬族|锡伯族|柯尔克孜族|达斡尔族|景颇族|毛南族|撒拉族|布朗族|塔吉克族|阿昌族|普米族|鄂温克族|怒族|京族|基诺族|德昂族|保安族|俄罗斯族|裕固族|乌兹别克族|门巴族|鄂伦春族|独龙族|塔塔尔族|赫哲族|珞巴族)')
        for match in pattern.finditer(document):
            self.nations.append(match.group())
            
        # 查找性别
        pattern = re.compile(r'男|女')
        for match in pattern.finditer(document):
            if match.group() == '男':
                self.sex0 = 1
            else:
                self.sex1 = 1
